home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Developer Essentials / MPW Interfaces & Libraries / CIncludes / SANE.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-29  |  5.4 KB  |  232 lines  |  [TEXT/MPS ]

  1. /************************************************************
  2.  
  3. Created: Wednesday, September 27, 1989 at 2:58 PM
  4.     SANE.h
  5.     C Interface to the Macintosh Libraries
  6.  
  7.  
  8.     Copyright Apple Computer, Inc.    1985-1991
  9.     All rights reserved
  10.  
  11. ************************************************************/
  12.  
  13.  
  14. #ifndef __SANE__
  15. #define __SANE__
  16.  
  17. #ifndef __TYPES__
  18. #include <Types.h>
  19. #endif
  20.  
  21. #ifndef __MATH__
  22. #include <Math.h>
  23. #endif
  24.  
  25. #ifdef mc68881
  26.  
  27. /* specific to the MC68881 SANE library */
  28.  
  29. #define INEXACT ((exception)(8))
  30. #define DIVBYZERO ((exception)(16))
  31. #define UNDERFLOW ((exception)(32))
  32. #define OVERFLOW ((exception)(64))
  33. #define INVALID ((exception)(128))
  34. #define CURINEX1 ((exception)(256))
  35. #define CURINEX2 ((exception)(512))
  36. #define CURDIVBYZERO ((exception)(1024))
  37. #define CURUNDERFLOW ((exception)(2048))
  38. #define CUROVERFLOW ((exception)(4096))
  39. #define CUROPERROR ((exception)(8192))
  40. #define CURSIGNAN ((exception)(16384))
  41. #define CURBSONUNOR ((exception)(32768))
  42.  
  43. #else
  44.  
  45. /* specific to the software SANE library */
  46.  
  47. #define INVALID ((exception)(1))
  48. #define UNDERFLOW ((exception)(2))
  49. #define OVERFLOW ((exception)(4))
  50. #define DIVBYZERO ((exception)(8))
  51. #define INEXACT ((exception)(16))
  52. #define IEEEDEFAULTENV ((environment)(0))    /*IEEE-default floating-point environment*/
  53.  
  54. #endif                                        /* mc68881 */
  55.  
  56. /* The common interface to the SANE library */
  57.  
  58. /* Decimal Representation Constants */
  59.  
  60. #define SIGDIGLEN 20                        /* significant decimal digits */
  61. #define DECSTROUTLEN 80                     /* max length for dec2str output */
  62.  
  63. /* Decimal Formatting Styles */
  64.  
  65. #define FLOATDECIMAL ((char)(0))
  66. #define FIXEDDECIMAL ((char)(1))
  67.  
  68. /* Ordering Relations */
  69.  
  70. #define GREATERTHAN ((relop)(0))
  71. #define LESSTHAN ((relop)(1))
  72. #define EQUALTO ((relop)(2))
  73. #define UNORDERED ((relop)(3))
  74.  
  75. /* Inquiry Classes */
  76.  
  77. #define SNAN ((numclass)(0))
  78. #define QNAN ((numclass)(1))
  79. #define INFINITE ((numclass)(2))
  80. #define ZERONUM ((numclass)(3))
  81. #define NORMALNUM ((numclass)(4))
  82. #define DENORMALNUM ((numclass)(5))
  83.  
  84. /* Rounding Directions */
  85.  
  86. #define TONEAREST ((rounddir)(0))
  87. #define UPWARD ((rounddir)(1))
  88. #define DOWNWARD ((rounddir)(2))
  89. #define TOWARDZERO ((rounddir)(3))
  90.  
  91. /* Rounding Precisions */
  92.  
  93. #define EXTPRECISION ((roundpre)(0))
  94. #define DBLPRECISION ((roundpre)(1))
  95. #define FLOATPRECISION ((roundpre)(2))
  96.  
  97. #ifdef mc68881
  98.  
  99. typedef long exception;
  100.  
  101. struct environment {
  102.     long FPCR;
  103.     long FPSR;
  104. };
  105.  
  106. typedef struct environment environment;
  107.  
  108. extern environment IEEEDEFAULTENV;
  109.  
  110. struct trapvector {
  111.     void (*unordered)();
  112.     void (*inexact)();
  113.     void (*divbyzero)();
  114.     void (*underflow)();
  115.     void (*operror)();
  116.     void (*overflow)();
  117.     void (*signan)();
  118. };
  119.  
  120. typedef struct trapvector trapvector;
  121. #else
  122.  
  123. typedef short exception;
  124. typedef short environment;
  125. typedef struct {short w[6];} extended96;
  126.  
  127. struct mischaltinfo {
  128.     unsigned short haltexceptions;
  129.     unsigned short pendingCCR;
  130.     long pendingD0;
  131. };
  132.  
  133. typedef struct mischaltinfo mischaltinfo;
  134. typedef pascal void (*haltvector)(mischaltinfo *misc, void *src2, void *src, void *dst, short opcode);
  135. #endif
  136.  
  137. typedef short relop;                        /* relational operator */
  138. typedef short numclass;                     /* inquiry class */
  139. typedef short rounddir;                     /* rounding direction */
  140. typedef short roundpre;                     /* rounding precision */
  141.  
  142. struct decimal {
  143.     char sgn;                                /*sign 0 for +, 1 for -*/
  144.     char unused;
  145.     short exp;                                /*decimal exponent*/
  146.     struct{
  147.         unsigned char length;
  148.         unsigned char text[SIGDIGLEN];        /*significant digits */
  149.         unsigned char unused;
  150.         }sig;
  151. };
  152.  
  153. typedef struct decimal decimal;
  154. struct decform {
  155.     char style;                             /*FLOATDECIMAL or FIXEDDECIMAL*/
  156.     char unused;
  157.     short digits;
  158. };
  159.  
  160. typedef struct decform decform;
  161. #ifdef __cplusplus
  162. extern "C" {
  163. #endif
  164.  
  165. #ifdef mc68881
  166.  
  167. struct trapvector gettrapvector(void);
  168. void settrapvector(const trapvector *v);
  169. void x96tox80(const extended *x,extended80 *x80);
  170. void x80tox96(const extended80 *x80,extended *x);
  171.  
  172. #else
  173.  
  174. haltvector gethaltvector(void); 
  175. void sethaltvector(haltvector v);
  176. void x96tox80(const extended96 *x96,extended *x);
  177. void x80tox96(const extended *x,extended96 *x96);
  178.  
  179. #endif
  180.  
  181. void num2dec(const decform *f,extended x,decimal *d);
  182. extended dec2num(const decimal *d); 
  183. void dec2str(const decform *f,const decimal *d,char *s);
  184. void str2dec(const char *s,short *ix,decimal *d,short *vp); 
  185. extended remainder(extended x,extended y,short *quo);
  186. extended rint(extended x);
  187. extended scalb(short n,extended x); 
  188. extended logb(extended x);
  189. extended copysign(extended x,extended y);
  190. extended nextfloat(extended x,extended y);
  191. extended nextdouble(extended x,extended y); 
  192. extended nextextended(extended x,extended y);
  193. extended log2(extended x);
  194. extended log1(extended x);
  195. extended exp2(extended x);
  196. extended exp1(extended x);
  197.  
  198. #define power(x,y) pow(x,y)
  199.  
  200. extended ipower(extended x,short i);
  201. extended compound(extended r,extended n);
  202. extended annuity(extended r,extended n);
  203. extended randomx(extended *x);
  204. numclass classfloat(extended x);
  205. numclass classdouble(extended x);
  206. numclass classcomp(extended x); 
  207. numclass classextended(extended x); 
  208. long signnum(extended x);
  209. void setexception(exception e,long s);
  210. long testexception(exception e);
  211. void sethalt(exception e,long s);
  212. long testhalt(exception e); 
  213. void setround(rounddir r);
  214. rounddir getround(void);
  215. void setprecision(roundpre p);
  216. roundpre getprecision(void);
  217. void setenvironment(environment e); 
  218. void getenvironment(environment *e);
  219. void procentry(environment *e); 
  220. void procexit(environment e);
  221. relop relation(extended x,extended y);
  222. extended nan(unsigned char c);
  223.  
  224. #define inf() __inf()
  225.  
  226. extended pi(void);
  227. #ifdef __cplusplus
  228. }
  229. #endif
  230.  
  231. #endif
  232.